#include "app_manual_mode.h"
#include "tim7.h"           // for Key_EXTI_Init, Key_GetEvent
#include "tjc_usart_him.h"  // for HMI display
#include "usart4.h"         // for UART5_Printf debug
#include "flow.h"           // for golbal_flow


/* ===================== 私有变量 ===================== */

// 注意: 按键检测已改为中断方式,不再需要边沿检测标志


/* ===================== 函数实现 ===================== */

/**
 * @brief  手动模式控制初始化
 * @param  None
 * @retval None
 */
void app_manual_mode_init(void)
{
    // 初始状态为正常模式
    g_user_config.manual_mode = 0;

    // 初始化按键中断
    Key_EXTI_Init();

    // 清除HMI警告信息
    #ifdef USE_HMI_DISPLAY
    tjc_send_txt("warning", "");
    #endif
}


/**
 * @brief  手动模式检测与切换
 * @param  None
 * @retval None
 * @note   在主循环中调用,使用中断方式检测按键
 */
void app_manual_mode_check(void)
{
    // ========== 步骤1: 检查按键中断事件 ==========
    u8 key_pressed_event = Key_GetEvent();  // 读取并清除中断事件标志

    // ========== 步骤2: 读取流量数据 ==========
    // 注意: 直接从golbal_flow读取,不使用g_user_config.flow_instant
    // 原因: 手动模式下app_uv_control_process()会直接返回,不会更新g_user_config.flow_instant
    float flow_instant = golbal_flow.instant;

    // ========== 步骤3: 模式切换逻辑 ==========
    if (g_user_config.manual_mode == 0)
    {
        // ========== 当前在正常模式 ==========
        // 进入手动模式条件: 流量<阈值 AND UV灯关闭 AND 按键按下
        // (参考 app逻辑.txt 第42-47行: 只有当流量小且UV灯关闭时才允许按键触发)
        if (flow_instant < UV_FLOW_THRESHOLD &&
            g_user_config.uv_is_working == 0 &&
            key_pressed_event == 1)
        {
            app_manual_mode_enter();
        }
    }
    else
    {
        // ========== 当前在手动模式 ==========
        // 退出手动模式条件: 流量≥阈值
        if (flow_instant >= UV_FLOW_THRESHOLD)
        {
            app_manual_mode_exit();
        }
    }
}


/**
 * @brief  强制进入手动模式
 * @param  None
 * @retval None
 */
void app_manual_mode_enter(void)
{
    // 设置手动模式标志
    g_user_config.manual_mode = 1;

    // 更新系统状态
    g_user_config.system_state = SYS_STATE_MANUAL;

    // 禁用UV定时功能
    g_user_config.uv_timer.enable = 0;

    // 强制关闭UV灯(手动模式下不杀菌)
    UvLight_Close;
    g_user_config.uv_is_working = 0;

    // HMI显示警告信息
    #ifdef USE_HMI_DISPLAY
    tjc_send_txt("warning", "水未杀菌");
    #endif

    // 调试输出
    #if DEBUG_APP_ENABLE
    UART5_Printf("[Manual Mode] ENTERED - Flow:%.2f L/min\r\n",
                 g_user_config.flow_instant);
    #endif
}


/**
 * @brief  强制退出手动模式
 * @param  None
 * @retval None
 */
void app_manual_mode_exit(void)
{
    // 清除手动模式标志
    g_user_config.manual_mode = 0;

    // 更新系统状态
    g_user_config.system_state = SYS_STATE_STANDBY;

    // 开启UV定时功能
    g_user_config.uv_timer.enable = 1;

    // 清除HMI警告信息
    #ifdef USE_HMI_DISPLAY
    tjc_send_txt("warning", "");
    #endif

    // 调试输出
    #if DEBUG_APP_ENABLE
    UART5_Printf("[Manual Mode] EXITED - Flow:%.2f L/min\r\n",
                 g_user_config.flow_instant);
    #endif
}
